<?php

	class Endereco{

		private $rua;
		private $numero;
		private $bairro;
		private $cep;
		private $complemento;
		private $cidade;
		private $estado;
		private $erros;

		public function __set( $key, $val ) {
			$this->$key = $val;
		}

		public function __get( $key ) {
			return $this->$key;
		}

		public function __construct( $rua, $numero, $bairro, $cep, $cidade, $estado, $complemento = "" ) {
			$this->rua = $rua;
			$this->numero = $numero;
			$this->bairro = $bairro;
			$this->cep = $cep;
			$this->cidade = $cidade;
			$this->estado = $estado;
			$this->isValid();
		}		

		public function isValid() {
			$this->validaRua();
			$this->validaNumero();
			$this->validaBairro();
			$this->validaCep();
			$this->validaCidade();
			$this->validaEstado();
			if( !$this->erros )
				return true;
		}
		
		public function getErros() {
			return $this->erros;
		}

		private function validaRua() {
			if( strlen( trim( $this->rua ) ) < 2 )
				$this->erros[] = "Esta rua (<b> " . $this->rua  ."</b> ) é inválida. Espera-se mais de 2 caracteres.";
		}

		private function validaNumero() {
			if( strlen( trim( $this->numero ) ) < 2 ) 
				$this->erros[] = "Este número (<b> ". $this->numero . "</b> ) é inválido. Espera-se mais de 2 caracteres.";
		}

		private function validaBairro() {
			if( strlen( trim( $this->bairro ) ) < 2 )
				$this->erros[] = "Este bairro (<b> ". $this->bairro . "</b> ) é inválido. Espera-se mais de 2 caracteres.";
		}

		private function validaCep() {
			if( !preg_match("/^[0-9]{5}-[0-9]{3}$/", $this->cep) )
				$this->erros[] = "Este cep (<b> " . $this->cep . "</b> ) é inválido. Espera-se o seguinte formato #####-###";
		}

		private function validaCidade() {
			if( strlen( trim( $this->cidade ) ) < 2 )
				$this->erros[] = "Esta cidade (<b> " . $this->cidade . "</b> ) é inválida. Espera-se mais de 2 caracteres ";
		}

		private function validaEstado() {
			$siglaEstados = array(
				"AC"=>"Acre", 
				"AL"=>"Alagoas", 
				"AM"=>"Amazonas", 
				"AP"=>"Amapá",
				"BA"=>"Bahia",
				"CE"=>"Ceará",
				"DF"=>"Distrito Federal",
				"ES"=>"Espírito Santo",
				"GO"=>"Goiás",
				"MA"=>"Maranhão",
				"MT"=>"Mato Grosso",
				"MS"=>"Mato Grosso do Sul",
				"MG"=>"Minas Gerais",
				"PA"=>"Pará",
				"PB"=>"Paraíba",
				"PR"=>"Paraná",
				"PE"=>"Pernambuco",
				"PI"=>"Piauí",
				"RJ"=>"Rio de Janeiro",
				"RN"=>"Rio Grande do Norte",
				"RO"=>"Rondônia",
				"RS"=>"Rio Grande do Sul",
				"RR"=>"Roraima",
				"SC"=>"Santa Catarina",
				"SE"=>"Sergipe",
				"SP"=>"São Paulo",
				"TO"=>"Tocantins" );
			if ( !$siglaEstados[ strtoupper( $this->estado ) ] ) 
				$this->erros[] = "Este estado é (<b>" . $this->estado . "</b> ) inválido.";
		}

	}
?>